/**
 * 字符串处理工具函数
 */

// 导出统一的对象，避免命名冲突
export const strUtil = {
  /**
   * 判断字符串是否为空白
   * @param strs 待检测的字符串(支持多个)
   * @returns 是否有空白字符串
   */
  hasBlank(...strs: (string | null | undefined)[]): boolean {
    if (!strs || strs.length === 0) return true;
    return strs.some(str => str === null || str === undefined || str.trim() === '');
  },

  /**
   * 截断字符串到指定长度，超出部分用省略号替代
   * @param str 原始字符串
   * @param maxLength 最大长度
   * @param suffix 后缀，默认为"..."
   * @returns 处理后的字符串
   */
  truncate(str: string, maxLength: number, suffix: string = '...'): string {
    if (!str) return '';
    if (str.length <= maxLength) return str;
    return str.substring(0, maxLength) + suffix;
  },

  /**
   * 首字母大写
   * @param str 原始字符串
   * @returns 首字母大写的字符串
   */
  capitalize(str: string): string {
    if (!str) return '';
    return str.charAt(0).toUpperCase() + str.slice(1);
  },

  /**
   * 驼峰命名转连字符命名
   * @param str 原始字符串（驼峰命名）
   * @returns 连字符命名的字符串
   */
  camelToKebab(str: string): string {
    if (!str) return '';
    return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
  },

  /**
   * 连字符命名转驼峰命名
   * @param str 原始字符串（连字符命名）
   * @returns 驼峰命名的字符串
   */
  kebabToCamel(str: string): string {
    if (!str) return '';
    // 处理连续的连字符，先将连续连字符替换为单个连字符
    const normalizedStr = str.replace(/-+/g, '-');
    return normalizedStr.replace(/-([a-z])/g, (_, group) => group.toUpperCase());
  },

  /**
   * 转义HTML特殊字符
   * @param html 包含HTML的字符串
   * @returns 转义后的字符串
   */
  escapeHtml(html: string): string {
    if (!html) return '';
    return html
      .replace(/&/g, '&amp;')
      .replace(/</g, '&lt;')
      .replace(/>/g, '&gt;')
      .replace(/"/g, '&quot;')
      .replace(/'/g, '&#039;');
  }
}; 